//easyUI datagrid 格式化函数库
//@author Leo.Liao

document.write("<script language='javascript' src='/index/languagePack/index/formatter'></script>");

/**
 * 格式化显示菜单图标
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function formatMenuIcon(value, row, index) {
    return "<span class='" + value + "' style='width: 20px;height:20px;float: left'></span>";
}

/**
 * 格式化状态
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function formatStatus(value, row, index) {
    switch (value) {
        case DATA_STATUS.ACTIVE:return "<b style='color: #00a0e9'>"+langFormatter.active+"</b>";break;
        case DATA_STATUS.LOCKED:return "<b style='color: #5f5f5f'>"+langFormatter.locked+"</b>";break;
        default : return "";
    }
}

/**
 * 格式化金额（两位小数）
 * @param value
 * @param row
 * @param index
 */
function formatAmountTo2Dec(value, row, index){
    if(value != null){
        let formatNumber = numberFormat(value,2,".",",");
        if(value > 0){
            return "<b style='color: #0000FF'>"+formatNumber+"</b>";
        }else if(value < 0){
            return "<b style='color: #dd0000'>"+formatNumber+"</b>";
        }else{
            return "<b style='color: #5f5f5f;'>"+formatNumber+"</b>";
        }
    }
    return "";
}

/**
 * 格式化金额（整数）
 * @param value
 * @param row
 * @param index
 */
function formatAmountTo0Dec(value, row, index){
    if(value != null){
        let formatNumber = numberFormat(value,0,".",",");
        if(value > 0){
            return "<b style='color: #0000FF'>"+formatNumber+"</b>";
        }else if(value < 0){
            return "<b style='color: #dd0000'>"+formatNumber+"</b>";
        }else{
            return "<b style='color: #5f5f5f;'>"+formatNumber+"</b>";
        }
    }
    return "";
}

/**
 * 格式化數字
 * @param number 要格式化的数字
 * @param decimals 保留几位小数
 * @param dec_point 小数点符号
 * @param thousands_sep 千分位符号
 * @returns {string}
 */
function numberFormat(number, decimals, dec_point, thousands_sep) {
    number = (number + '').replace(/[^0-9+-Ee.]/g, '');
    var n = !isFinite(+number) ? 0 : +number,
        prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),
        sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,
        dec = (typeof dec_point === 'undefined') ? '.' : dec_point,
        s = '',
        toFixedFix = function (n, prec) {
            var k = Math.pow(10, prec);
            return '' + Math.ceil(n * k) / k;
        };

    s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');
    var re = /(-?\d+)(\d{3})/;
    while (re.test(s[0])) {
        s[0] = s[0].replace(re, "$1" + sep + "$2");
    }

    if ((s[1] || '').length < prec) {
        s[1] = s[1] || '';
        s[1] += new Array(prec - s[1].length + 1).join('0');
    }
    return s.join(dec);
}

/**
 * 格式化菜单类型
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function formatMenuType(value, row, index) {
    if (value == MENU_TYPE.FIRST) {
        return langFormatter.firstMenu;
    } else {
        return langFormatter.secondMenu;
    }
}

/**
 * 將日期字符串格式化指定格式的日期時間字符串
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function formatDateTime(value, row, index) {
    if (value == null || value == "")
        return "";
    let date = new Date(value);
    return timestampFormatter(date, langFormatter.dateTimeFormat);
}

/**
 *
 * @param value
 * @param row
 * @param index
 * @returns {string|*}
 */
function formatAuthMenuCount(value, row, index) {
    if (value == null || value == "")
        return "";
    return row.authMenuCount + "&nbsp;/&nbsp;" + row.menuCount;
}

/**
 * 将时间戳格式化为指定日期时间格式的字符串
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function formatDateTimeByTimestamp(value, row, index) {
    if (value == null || value == "")
        return "";
    let date = new Date(value);
    return timestampFormatter(date, langFormatter.dateTimeFormat);
}

/**
 * 将日期字符串格式化为指定格式的日期字符串
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function formatDate(value, row, index) {
    if (value == null || value == "")
        return "";
    let date = new Date(value);
    value = timestampFormatter(date, langFormatter.dateFormat);
    return value;
}

/**
 * 将时间戳格式化为指定格式的日期
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function formatDateByTimestamp(value, row, index) {
    if (value == null || value == "")
        return "";
    let date = new Date(value);
    value = timestampFormatter(date, langFormatter.dateFormat);
    return value;
}

/**
 * 格式化数字为两位小数
 */
function formatNumberToTwoDecimal(value, row, index) {
    if (value == null) return;
    value = Number(value);
    return value.toFixed(2);
}

/**
 * 格式化数字为三位小数
 */
function formatNumberToThreeDecimal(value, row, index) {
    if (value == null) return;
    value = Number(value);
    return value.toFixed(3);
}

/**
 * 格式化数字为四位小数
 */
function formatNumberToFourDecimal(value, row, index) {
    if (value == null) return;
    value = Number(value);
    return value.toFixed(4);
}

/**
 * 格式化数字为五位小数
 */
function formatNumberToFiveDecimal(value, row, index) {
    if (value == null) return;
    value = Number(value);
    return value.toFixed(5);
}

//数据转化
function formatNumber(n) {
    n = n.toString();
    return n[1] ? n : '0' + n
}

/**
 * 时间戳转化为年 月 日 时 分 秒
 * number: 传入时间戳
 * format：返回格式，支持自定义，但参数必须与formateArr里保持一致
 */
function timestampFormatter(date, formatStr) {

    let formatArr = ['Y', 'M', 'D', 'h', 'm', 's'];
    let returnArr = [];

    returnArr.push(date.getFullYear());
    returnArr.push(formatNumber(date.getMonth() + 1));
    returnArr.push(formatNumber(date.getDate()));

    returnArr.push(formatNumber(date.getHours()));
    returnArr.push(formatNumber(date.getMinutes()));
    returnArr.push(formatNumber(date.getSeconds()));

    for (let i in returnArr) {
        formatStr = formatStr.replace(formatArr[i], returnArr[i]);
    }
    return formatStr;
}